package Aaaaaa;

import java.util.Scanner;

/**
 * X星理工大学新学期开学典礼正在X星理工大学体育馆隆重举行，小小X作为新生代表坐上了主席台。
 * 在无比骄傲的同时，看到下面坐着的黑压压的人群，小小X想到了这么一个问题：
 * 作为一所理工大学，女生真的很少。俗话说，红花还需绿叶衬。
 * 假设所有参加开学典礼的同学坐成一个 m 行 n 列的矩阵，其中男生用“M”表示，女生用“F”表示。
 * 如果一个女生的旁边8个方位（前、后、左、右以及左前、右前、左后、右后）坐着另外一个女生，
 * 那么她们属于“同一朵红花”。 现在给出一个用于表示男生和女生就坐情况的字符矩阵，
 * 请编写一个程序统计在该字符矩阵中一共有多少朵“红花”？
 *
 *
 *
 * 输入描述
 * 单组输入。 第1行输入两个正整数m和n，
 * 分别表示字符矩阵的行和列的数量（1<=m, n<=1000），二者之间用空格隔开。
 * 第2行到第m+1行，每行n列，对应一个仅包含“M”和“F”两种字符的字符矩阵，表示男生和女生就坐情况。
 *
 * 输出描述
 * 输出在字符矩阵中包含的“红花”数量。
 *
 *
 * 样例输入
 * 5 5
 * MMFMM
 * MMMMM
 * MMFFM
 * MMFMM
 * MMMMF
 * 样例输出
 * 3
 */
public class Main16 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int m=sc.nextInt();
        int n=sc.nextInt();
        char[][] matrix=new char[m][n];
        //处理输入
        for(int i=0;i<m;i++){
            String temp=sc.next();
            for(int j=0;j<temp.length();j++){
                matrix[i][j]=temp.charAt(j);
            }
        }
        int count=0;//红花数量
        for(int i=0;i<matrix.length;i++){
            for(int j=0;j<matrix[0].length;j++){
                if(matrix[i][j]=='F'){
                    //当前红花的开始位置
                    dfs(matrix,i,j,m,n);//搜索同一红花
                    count++;
                }
            }
        }
        System.out.println(count);
    }
    public static int[][] a= {{0,1},{0,-1},{1,0},{-1,0},{-1,-1},{1,-1},{1,1},{-1,1}};//方向矩阵
    private static void dfs(char[][] matrix, int x, int y,int row,int col) {
        matrix[x][y]='#';//将F变为#，可以防止再次被搜索到
        for(int i=0;i<8;i++){
            int newX=x+a[i][0];//x新下标
            int newY=y+a[i][1];//y新下标
            //非法情况
            if(newX<0||newY<0||newX>=row||newY>=col){
                continue;
            }
            //同一红花
            if(matrix[newX][newY]=='F'){
                dfs(matrix,newX,newY,row,col);//向下搜索
            }

        }
    }
}
